home *** CD-ROM | disk | FTP | other *** search
/ Openstep 4.2 (Developer) / Openstep Developer 4.2.iso / NextDeveloper / Source / GNU / uucp / Uucp.framework / uuconf.subproj / cmdfil.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-09  |  2.6 KB  |  107 lines

  1. /* cmdfil.c
  2.    Read and parse commands from a file.
  3.  
  4.    Copyright (C) 1992, 1993 Ian Lance Taylor
  5.  
  6.    This file is part of the Taylor UUCP uuconf library.
  7.  
  8.    This library is free software; you can redistribute it and/or
  9.    modify it under the terms of the GNU Library General Public License
  10.    as published by the Free Software Foundation; either version 2 of
  11.    the License, or (at your option) any later version.
  12.  
  13.    This library is distributed in the hope that it will be useful, but
  14.    WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.    Library General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU Library General Public
  19.    License along with this library; if not, write to the Free Software
  20.    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  21.  
  22.    The author of the program may be contacted at ian@airs.com or
  23.    c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
  24.    */
  25.  
  26. #include "uucnfi.h"
  27.  
  28. #if USE_RCS_ID
  29. const char _uuconf_cmdfil_rcsid[] = "$Id: cmdfil.c,v 1.6 1995/06/21 19:21:53 ian Rel $";
  30. #endif
  31.  
  32. #include <errno.h>
  33.  
  34. /* Read and parse commands from a file, updating uuconf_lineno as
  35.    appropriate.  */
  36.  
  37. int
  38. uuconf_cmd_file (pglobal, e, qtab, pinfo, pfiunknown, iflags, pblock)
  39.      pointer pglobal;
  40.      FILE *e;
  41.      const struct uuconf_cmdtab *qtab;
  42.      pointer pinfo;
  43.      int (*pfiunknown) P((pointer, int, char **, pointer, pointer));
  44.      int iflags;
  45.      pointer pblock;
  46. {
  47.   struct sglobal *qglobal = (struct sglobal *) pglobal;
  48.   boolean fcont;
  49.   char *zline;
  50.   size_t cline;
  51.   int iret;
  52.  
  53.   fcont = (iflags & UUCONF_CMDTABFLAG_BACKSLASH) != 0;
  54.  
  55.   zline = NULL;
  56.   cline = 0;
  57.  
  58.   iret = UUCONF_SUCCESS;
  59.  
  60.   qglobal->ilineno = 0;
  61.  
  62.   while ((fcont
  63.       ? _uuconf_getline (qglobal, &zline, &cline, e)
  64.       : getline (&zline, &cline, e)) > 0)
  65.     {
  66.       ++qglobal->ilineno;
  67.  
  68.       iret = uuconf_cmd_line (pglobal, zline, qtab, pinfo, pfiunknown,
  69.                   iflags, pblock);
  70.  
  71.       if ((iret & UUCONF_CMDTABRET_KEEP) != 0)
  72.     {
  73.       iret &=~ UUCONF_CMDTABRET_KEEP;
  74.  
  75.       if (pblock != NULL)
  76.         {
  77.           if (uuconf_add_block (pblock, zline) != 0)
  78.         {
  79.           qglobal->ierrno = errno;
  80.           iret = (UUCONF_MALLOC_FAILED
  81.               | UUCONF_ERROR_ERRNO
  82.               | UUCONF_ERROR_LINENO);
  83.           break;
  84.         }
  85.         }
  86.  
  87.       zline = NULL;
  88.       cline = 0;
  89.     }
  90.  
  91.       if ((iret & UUCONF_CMDTABRET_EXIT) != 0)
  92.     {
  93.       iret &=~ UUCONF_CMDTABRET_EXIT;
  94.       if (iret != UUCONF_SUCCESS)
  95.         iret |= UUCONF_ERROR_LINENO;
  96.       break;
  97.     }
  98.  
  99.       iret = UUCONF_SUCCESS;
  100.     }
  101.  
  102.   if (zline != NULL)
  103.     free ((pointer) zline);
  104.  
  105.   return iret;
  106. }
  107.